// 常用工具类方法

// 深拷贝
class utils {
  deepClone (data) {
    if (!data || Object.prototype.toString.call(data) !== '[object Object]') {
      return data
    }
    const targetObj = data.constructor === Array ? [] : {}
    Object.keys(data).forEach((keys) => {
      if (data[keys] && Object.prototype.toString.call(data[keys]) !== '[object Object]') {
        targetObj[keys] = data[keys].constructor === Array ? [] : {}
        targetObj[keys] = this.deepClone(data[keys])
      } else {
        targetObj[keys] = data[keys]
      }
    })
    return targetObj
  }

  // 生成唯一标识
  createToken (len, radix) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
    var uuid = [], i;
    radix = radix || chars.length;

    if (len) {
      // Compact form
      for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
    } else {
      // rfc4122, version 4 form
      var r;

      // rfc4122 requires these characters
      // uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
      // uuid[14] = '4';

      // Fill in random data. At i==19 set the high bits of clock sequence as
      // per rfc4122, sec. 4.1.5
      for (i = 0; i < 36; i++) {
        if (!uuid[i]) {
          r = 0 | Math.random() * 16;
          uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
        }
      }
    }

    return uuid.join('');
  }

  // // 函数节流
  // throttle(func, delay) {
  // 	var timer = null;
  // 	return function() {
  // 		var context = this;
  // 		var args = arguments;
  // 		if (!timer) {
  // 			timer = setTimeout(function() {
  // 				func.apply(context, args);
  // 				timer = null;
  // 			}, delay);
  // 		}
  // 	}
  // }

  // // 函数防抖
  // debounce(func, wait) {
  // 	let timer;
  // 	return function() {
  // 		let context = this; // 注意 this 指向
  // 		let args = arguments; // arguments中存着e

  // 		if (timer) clearTimeout(timer);

  // 		timer = setTimeout(() => {
  // 			func.apply(this, args)
  // 		}, wait)
  // 	}
  // }

  // // 简单数组去从
  // arrRemoval(arr){
  // 	let set6 = new Set(...arr)
  // 	return set
  // }
}

export default new utils;



